home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / termsorc.lha / Extras / Source / term-source.lha / PatternPanel.c < prev    next >
C/C++ Source or Header  |  1995-09-28  |  24KB  |  1,045 lines

  1. /*
  2. **    PatternPanel.c
  3. **
  4. **    Editing panel for phone number patterns
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. ** :ts=4
  10. */
  11.  
  12. #include "termGlobal.h"
  13.  
  14. enum    {    GAD_LIST,GAD_COMMENT,GAD_PATTERN,
  15.             GAD_TOP,GAD_UP,GAD_DOWN,GAD_END,
  16.             GAD_NEW,GAD_REMOVE,GAD_CLEAR,
  17.             GAD_EDIT,
  18.             GAD_LOAD,GAD_SAVE,GAD_USE,GAD_CLOSE
  19.         };
  20.  
  21. VOID
  22. PatternPanel()
  23. {
  24.     STATIC LONG ButtonID[] =
  25.     {
  26.         MSG_FASTMACROPANEL_NEW_GAD,
  27.         MSG_GLOBAL_REMOVE_GAD,
  28.         MSG_UPLOADQUEUE_CLEAR_TXT,
  29.         MSG_V36_0043
  30.     };
  31.  
  32.     struct LayoutHandle *Handle;
  33.     struct PatternNode    *Node;
  34.     LONG                 ListCount;
  35.     struct List         *PhoneList;
  36.     WORD                 i,Max,Len;
  37.     LONG                 MaxWidth,MaxHeight;
  38.  
  39.     PhoneList = CreatePhoneList();
  40.  
  41.     ListCount = GetListSize(PatternList);
  42.  
  43.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  44.         LH_LocaleHook,    &LocaleHook,
  45.     TAG_DONE))
  46.     {
  47.         struct Window    *LocalWindow;
  48.         struct IBox     Bounds;
  49.  
  50.         for(i = Max = 0 ; i < 4 ; i++)
  51.         {
  52.             if((Len = LT_LabelChars(Handle,LocaleString(ButtonID[i]))) > Max)
  53.                 Max = Len;
  54.         }
  55.  
  56.         LT_New(Handle,
  57.             LA_Type,    VERTICAL_KIND,
  58.         TAG_DONE);
  59.         {
  60.             LT_New(Handle,
  61.                 LA_Type,        VERTICAL_KIND,
  62.                 LA_LabelID,     MSG_AREACODE_GROUPS_TXT,
  63.             TAG_DONE);
  64.             {
  65.                 MaxWidth = MaxHeight = 0;
  66.  
  67.                 if(PatternList)
  68.                 {
  69.                     struct Node *Node;
  70.                     LONG Len;
  71.  
  72.                     for(Node = PatternList -> lh_Head ; Node -> ln_Succ ; Node = Node -> ln_Succ)
  73.                     {
  74.                         Len = strlen(Node -> ln_Name);
  75.  
  76.                         if(Len > MaxWidth)
  77.                             MaxWidth = Len;
  78.  
  79.                         MaxHeight++;
  80.                     }
  81.                 }
  82.  
  83.                 if(MaxWidth < 30)
  84.                     MaxWidth = 30;
  85.  
  86.                 if(MaxHeight < 10)
  87.                     MaxHeight = 10;
  88.                 else
  89.                 {
  90.                     if(MaxHeight > 20)
  91.                         MaxHeight = 20;
  92.                 }
  93.  
  94.                 LT_New(Handle,
  95.                     LA_Type,        LISTVIEW_KIND,
  96.                     LA_LabelID,     MSG_AREACODE_GROUPS_GAD,
  97.                     LA_LabelPlace,    PLACE_LEFT,
  98.                     LA_Chars,        30,
  99.                     LA_Lines,        10,
  100.                     LA_ID,            GAD_LIST,
  101.                     LALV_CursorKey, TRUE,
  102.                     LALV_ResizeX,    TRUE,
  103.                     LALV_ResizeY,    TRUE,
  104.                     LALV_MaxGrowY,    MaxHeight,
  105.                     LALV_MaxGrowX,    MaxWidth,
  106.                     GTLV_Labels,    PatternList,
  107.  
  108.                     Kick30 ? LALV_Link : TAG_IGNORE, NIL_LINK,
  109.                 TAG_DONE);
  110.  
  111.                 LT_New(Handle,
  112.                     LA_Type,        STRING_KIND,
  113.                     LA_LabelID,     MSG_AREACODE_NAME_GAD,
  114.                     LA_ID,            GAD_COMMENT,
  115.                     GTST_MaxChars,    39,
  116.                     GA_Disabled,    TRUE,
  117.                 TAG_DONE);
  118.  
  119.                 LT_New(Handle,
  120.                     LA_Type,        STRING_KIND,
  121.                     LA_LabelID,     MSG_AREACODE_PATTERN_GAD,
  122.                     LA_ID,            GAD_PATTERN,
  123.                     GTST_MaxChars,    255,
  124.                     GA_Disabled,    TRUE,
  125.                 TAG_DONE);
  126.  
  127.                 LT_EndGroup(Handle);
  128.             }
  129.  
  130.             LT_New(Handle,
  131.                 LA_Type,    HORIZONTAL_KIND,
  132.             TAG_DONE);
  133.             {
  134.                 LT_New(Handle,
  135.                     LA_Type,        VERTICAL_KIND,
  136.                     LA_LabelID,     MSG_V36_0038,
  137.                 TAG_DONE);
  138.                 {
  139.                     LT_New(Handle,
  140.                         LA_Type,        HORIZONTAL_KIND,
  141.                         LA_SameSize,    TRUE,
  142.                     TAG_DONE);
  143.                     {
  144.                         LT_New(Handle,
  145.                             LA_Type,            TAPEDECK_KIND,
  146.                             LATD_ButtonType,    TDBT_PREVIOUS,
  147.                             LATD_Smaller,        TRUE,
  148.                             LA_ID,                GAD_TOP,
  149.                             LA_NoKey,            TRUE,
  150.                             GA_Disabled,        TRUE,
  151.                         TAG_DONE);
  152.  
  153.                         LT_New(Handle,
  154.                             LA_Type,            TAPEDECK_KIND,
  155.                             LATD_ButtonType,    TDBT_NEXT,
  156.                             LATD_Smaller,        TRUE,
  157.                             LA_ID,                GAD_END,
  158.                             LA_NoKey,            TRUE,
  159.                             GA_Disabled,        TRUE,
  160.                         TAG_DONE);
  161.  
  162.                         LT_EndGroup(Handle);
  163.                     }
  164.  
  165.                     LT_New(Handle,
  166.                         LA_Type,        HORIZONTAL_KIND,
  167.                         LA_SameSize,    TRUE,
  168.                     TAG_DONE);
  169.                     {
  170.                         LT_New(Handle,
  171.                             LA_Type,            TAPEDECK_KIND,
  172.                             LATD_ButtonType,    TDBT_REWIND,
  173.                             LATD_Smaller,        TRUE,
  174.                             LA_ID,                GAD_UP,
  175.                             LA_NoKey,            TRUE,
  176.                             GA_Disabled,        TRUE,
  177.                         TAG_DONE);
  178.  
  179.                         LT_New(Handle,
  180.                             LA_Type,            TAPEDECK_KIND,
  181.                             LATD_ButtonType,    TDBT_PLAY,
  182.                             LATD_Smaller,        TRUE,
  183.                             LA_ID,                GAD_DOWN,
  184.                             LA_NoKey,            TRUE,
  185.                             GA_Disabled,        TRUE,
  186.                         TAG_DONE);
  187.  
  188.                         LT_EndGroup(Handle);
  189.                     }
  190.  
  191.                     LT_EndGroup(Handle);
  192.                 }
  193.  
  194.                 LT_New(Handle,
  195.                     LA_Type,        VERTICAL_KIND,
  196.                     LA_LabelID,     MSG_V36_0043,
  197.                 TAG_DONE);
  198.                 {
  199.                     LT_New(Handle,
  200.                         LA_Type,        HORIZONTAL_KIND,
  201.                         LA_SameSize,    TRUE,
  202.                     TAG_DONE);
  203.                     {
  204.                         LT_New(Handle,
  205.                             LA_Type,        BUTTON_KIND,
  206.                             LA_LabelID,     MSG_FASTMACROPANEL_NEW_GAD,
  207.                             LA_ID,            GAD_NEW,
  208.                             LA_Chars,        Max,
  209.                         TAG_DONE);
  210.  
  211.                         LT_New(Handle,
  212.                             LA_Type,        BUTTON_KIND,
  213.                             LA_LabelID,     MSG_GLOBAL_REMOVE_GAD,
  214.                             LA_ID,            GAD_REMOVE,
  215.                             GA_Disabled,    TRUE,
  216.                             LA_Chars,        Max,
  217.                         TAG_DONE);
  218.  
  219.                         LT_EndGroup(Handle);
  220.                     }
  221.  
  222.                     LT_New(Handle,
  223.                         LA_Type,        HORIZONTAL_KIND,
  224.                         LA_SameSize,    TRUE,
  225.                     TAG_DONE);
  226.                     {
  227.                         LT_New(Handle,
  228.                             LA_Type,        BUTTON_KIND,
  229.                             LA_LabelID,     MSG_UPLOADQUEUE_CLEAR_TXT,
  230.                             LA_ID,            GAD_CLEAR,
  231.                             GA_Disabled,    PatternList -> lh_Head -> ln_Succ == NULL,
  232.                             LA_Chars,        Max,
  233.                         TAG_DONE);
  234.  
  235.                         LT_New(Handle,
  236.                             LA_Type,        BUTTON_KIND,
  237.                             LA_LabelID,     MSG_V36_0043,
  238.                             LA_ID,            GAD_EDIT,
  239.                             GA_Disabled,    TRUE,
  240.                             LA_Chars,        Max,
  241.                         TAG_DONE);
  242.  
  243.                         LT_EndGroup(Handle);
  244.                     }
  245.  
  246.                     LT_EndGroup(Handle);
  247.                 }
  248.  
  249.                 LT_EndGroup(Handle);
  250.             }
  251.  
  252.             LT_New(Handle,
  253.                 LA_Type,    VERTICAL_KIND,
  254.             TAG_DONE);
  255.             {
  256.                 LT_New(Handle,LA_Type,XBAR_KIND,LAXB_FullSize,TRUE,TAG_DONE);
  257.  
  258.                 LT_EndGroup(Handle);
  259.             }
  260.  
  261.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  262.                 LAGR_SameSize,    TRUE,
  263.                 LAGR_Spread,    TRUE,
  264.                 LA_ExtraSpace,    TRUE,
  265.             TAG_DONE);
  266.             {
  267.                 LT_New(Handle,
  268.                     LA_Type,        BUTTON_KIND,
  269.                     LA_LabelID,     MSG_GLOBAL_USE_GAD,
  270.                     LA_ID,            GAD_USE,
  271.                     LABT_ReturnKey, TRUE,
  272.                     LABT_ExtraFat,    TRUE,
  273.                 TAG_DONE);
  274.  
  275.                 LT_New(Handle,
  276.                     LA_Type,        BUTTON_KIND,
  277.                     LA_LabelID,     MSG_GLOBAL_LOAD_GAD,
  278.                     LA_ID,            GAD_LOAD,
  279.                     LABT_ExtraFat,    TRUE,
  280.                     GA_Disabled,    ChosenPattern != NULL,
  281.                 TAG_DONE);
  282.  
  283.                 LT_New(Handle,
  284.                     LA_Type,        BUTTON_KIND,
  285.                     LA_LabelID,     MSG_GLOBAL_SAVE_GAD,
  286.                     LA_ID,            GAD_SAVE,
  287.                     LABT_ExtraFat,    TRUE,
  288.                     GA_Disabled,    PatternList -> lh_Head -> ln_Succ == NULL,
  289.                 TAG_DONE);
  290.  
  291.                 LT_New(Handle,
  292.                     LA_Type,        BUTTON_KIND,
  293.                     LA_LabelID,     MSG_GLOBAL_CLOSE_TXT,
  294.                     LA_ID,            GAD_CLOSE,
  295.                     LABT_EscKey,    TRUE,
  296.                     LABT_ExtraFat,    TRUE,
  297.                 TAG_DONE);
  298.  
  299.                 LT_EndGroup(Handle);
  300.             }
  301.  
  302.             LT_EndGroup(Handle);
  303.         }
  304.  
  305.         if(Screen && Window)
  306.         {
  307.             Bounds . Left    = Window -> LeftEdge;
  308.             Bounds . Top    = Window -> TopEdge;
  309.             Bounds . Width    = Window -> Width;
  310.             Bounds . Height = Window -> Height;
  311.         }
  312.  
  313.         if(LocalWindow = LT_Build(Handle,
  314.             LAWN_TitleID,        MSG_AREACODE_GROUPS_TITLE,
  315.             LAWN_IDCMP,        IDCMP_CLOSEWINDOW,
  316.             LAWN_HelpHook,        &GuideHook,
  317.             LAWN_Parent,        Window,
  318.             WA_DepthGadget,     TRUE,
  319.             WA_CloseGadget,     TRUE,
  320.             WA_DragBar,         TRUE,
  321.             WA_RMBTrap,         TRUE,
  322.             WA_Activate,        TRUE,
  323.             WA_SimpleRefresh,    TRUE,
  324.  
  325.             Screen ? LAWN_Bounds : TAG_IGNORE, &Bounds,
  326.         TAG_DONE))
  327.         {
  328.             struct IntuiMessage     *Message;
  329.             BOOLEAN                  Done = FALSE;
  330.             ULONG                     MsgClass;
  331.             UWORD                     MsgCode;
  332.             struct Gadget            *MsgGadget;
  333.  
  334.             struct PatternNode        *Selected = NULL;
  335.             ULONG                     Offset = 0;
  336.  
  337.             UBYTE                     DummyBuffer[MAX_FILENAME_LENGTH],
  338.                                     *DummyChar;
  339.             struct FileRequester    *FileRequest;
  340.             LONG                     Error;
  341.  
  342.             GuideContext(CONTEXT_AREA_CODES);
  343.  
  344.             PushWindow(LocalWindow);
  345.  
  346.             do
  347.             {
  348.                 if(Wait(PORTMASK(LocalWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  349.                     break;
  350.  
  351.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  352.                 {
  353.                     MsgClass        = Message -> Class;
  354.                     MsgCode         = Message -> Code;
  355.                     MsgGadget        = (struct Gadget *)Message -> IAddress;
  356.  
  357.                     LT_ReplyIMsg(Message);
  358.  
  359.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  360.                         Done = TRUE;
  361.  
  362.                     if(MsgClass == IDCMP_IDCMPUPDATE)
  363.                     {
  364.                         if(MsgGadget -> GadgetID == GAD_LIST)
  365.                         {
  366.                             if(!Selected)
  367.                             {
  368.                                 if(Selected = (struct PatternNode *)GetListNode(MsgCode,(struct List *)PatternList))
  369.                                 {
  370.                                     Offset = MsgCode;
  371.  
  372.                                     LT_SetAttributes(Handle,GAD_COMMENT,
  373.                                         GTST_String,    Selected -> Comment,
  374.                                         GA_Disabled,    FALSE,
  375.                                     TAG_DONE);
  376.  
  377.                                     LT_SetAttributes(Handle,GAD_PATTERN,
  378.                                         GTST_String,    Selected -> Pattern,
  379.                                         GA_Disabled,    FALSE,
  380.                                     TAG_DONE);
  381.  
  382.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  383.                                         GA_Disabled,    &Selected -> List == ChosenPattern,
  384.                                     TAG_DONE);
  385.  
  386.                                     LT_SetAttributes(Handle,GAD_EDIT,
  387.                                         GA_Disabled,    &Selected -> List == ChosenPattern,
  388.                                     TAG_DONE);
  389.  
  390.                                     LT_SetAttributes(Handle,GAD_TOP,
  391.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  392.                                     TAG_DONE);
  393.  
  394.                                     LT_SetAttributes(Handle,GAD_UP,
  395.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  396.                                     TAG_DONE);
  397.  
  398.                                     LT_SetAttributes(Handle,GAD_DOWN,
  399.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  400.                                     TAG_DONE);
  401.  
  402.                                     LT_SetAttributes(Handle,GAD_END,
  403.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  404.                                     TAG_DONE);
  405.                                 }
  406.                             }
  407.  
  408.                             if(Selected && (&Selected -> List != ChosenPattern))
  409.                             {
  410.                                 LT_PressButton(Handle,GAD_EDIT);
  411.  
  412.                                 LT_LockWindow(LocalWindow);
  413.  
  414.                                 PatternsChanged |= RatePanel(LocalWindow,PhoneList,NULL,&Selected -> List);
  415.  
  416.                                 LT_UnlockWindow(LocalWindow);
  417.                             }
  418.                         }
  419.                     }
  420.  
  421.                     if(MsgClass == IDCMP_GADGETUP)
  422.                     {
  423.                         switch(MsgGadget -> GadgetID)
  424.                         {
  425.                             case GAD_CLOSE:
  426.                             case GAD_USE:
  427.  
  428.                                 Done = TRUE;
  429.                                 break;
  430.  
  431.                             case GAD_TOP:
  432.  
  433.                                 LT_SetAttributes(Handle,GAD_LIST,
  434.                                     GTLV_Labels,    ~0,
  435.                                 TAG_DONE);
  436.  
  437.                                 Remove((struct Node *)Selected);
  438.  
  439.                                 AddHead((struct List *)PatternList,(struct Node *)Selected);
  440.  
  441.                                 Offset = 0;
  442.  
  443.                                 LT_SetAttributes(Handle,GAD_LIST,
  444.                                     GTLV_Labels,    PatternList,
  445.                                     GTLV_Selected,    Offset,
  446.                                     GTLV_Top,        Offset,
  447.                                 TAG_DONE);
  448.  
  449.                                 LT_SetAttributes(Handle,GAD_TOP,
  450.                                     GA_Disabled,    TRUE,
  451.                                 TAG_DONE);
  452.  
  453.                                 LT_SetAttributes(Handle,GAD_UP,
  454.                                     GA_Disabled,    TRUE,
  455.                                 TAG_DONE);
  456.  
  457.                                 LT_SetAttributes(Handle,GAD_DOWN,
  458.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  459.                                 TAG_DONE);
  460.  
  461.                                 LT_SetAttributes(Handle,GAD_END,
  462.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  463.                                 TAG_DONE);
  464.  
  465.                                 PatternsChanged = TRUE;
  466.                                 break;
  467.  
  468.                             case GAD_UP:
  469.  
  470.                                 LT_SetAttributes(Handle,GAD_LIST,
  471.                                     GTLV_Labels,    ~0,
  472.                                 TAG_DONE);
  473.  
  474.                                 Node = (struct PatternNode *)Selected -> Node . ln_Pred -> ln_Pred;
  475.  
  476.                                 Remove((struct Node *)Selected);
  477.  
  478.                                 Insert((struct List *)PatternList,(struct Node *)Selected,(struct Node *)Node);
  479.  
  480.                                 Offset--;
  481.  
  482.                                 LT_SetAttributes(Handle,GAD_LIST,
  483.                                     GTLV_Labels,    PatternList,
  484.                                     GTLV_Selected,    Offset,
  485.                                     GTLV_Top,        Offset,
  486.                                 TAG_DONE);
  487.  
  488.                                 LT_SetAttributes(Handle,GAD_TOP,
  489.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  490.                                 TAG_DONE);
  491.  
  492.                                 LT_SetAttributes(Handle,GAD_UP,
  493.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  494.                                 TAG_DONE);
  495.  
  496.                                 LT_SetAttributes(Handle,GAD_DOWN,
  497.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  498.                                 TAG_DONE);
  499.  
  500.                                 LT_SetAttributes(Handle,GAD_END,
  501.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  502.                                 TAG_DONE);
  503.  
  504.                                 PatternsChanged = TRUE;
  505.  
  506.                                 break;
  507.  
  508.                             case GAD_DOWN:
  509.  
  510.                                 LT_SetAttributes(Handle,GAD_LIST,
  511.                                     GTLV_Labels,    ~0,
  512.                                 TAG_DONE);
  513.  
  514.                                 Node = (struct PatternNode *)Selected -> Node . ln_Succ;
  515.  
  516.                                 Remove((struct Node *)Selected);
  517.  
  518.                                 Insert((struct List *)PatternList,(struct Node *)Selected,(struct Node *)Node);
  519.  
  520.                                 Offset++;
  521.  
  522.                                 LT_SetAttributes(Handle,GAD_LIST,
  523.                                     GTLV_Labels,    PatternList,
  524.                                     GTLV_Selected,    Offset,
  525.                                     GTLV_Top,        Offset,
  526.                                 TAG_DONE);
  527.  
  528.                                 LT_SetAttributes(Handle,GAD_TOP,
  529.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  530.                                 TAG_DONE);
  531.  
  532.                                 LT_SetAttributes(Handle,GAD_UP,
  533.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  534.                                 TAG_DONE);
  535.  
  536.                                 LT_SetAttributes(Handle,GAD_DOWN,
  537.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  538.                                 TAG_DONE);
  539.  
  540.                                 LT_SetAttributes(Handle,GAD_END,
  541.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  542.                                 TAG_DONE);
  543.  
  544.                                 PatternsChanged = TRUE;
  545.  
  546.                                 break;
  547.  
  548.                             case GAD_END:
  549.  
  550.                                 LT_SetAttributes(Handle,GAD_LIST,
  551.                                     GTLV_Labels,    ~0,
  552.                                 TAG_DONE);
  553.  
  554.                                 Remove((struct Node *)Selected);
  555.  
  556.                                 AddTail((struct List *)PatternList,(struct Node *)Selected);
  557.  
  558.                                 Offset = ListCount - 1;
  559.  
  560.                                 LT_SetAttributes(Handle,GAD_LIST,
  561.                                     GTLV_Labels,    PatternList,
  562.                                     GTLV_Selected,    Offset,
  563.                                     GTLV_Top,        Offset,
  564.                                 TAG_DONE);
  565.  
  566.                                 LT_SetAttributes(Handle,GAD_TOP,
  567.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  568.                                 TAG_DONE);
  569.  
  570.                                 LT_SetAttributes(Handle,GAD_UP,
  571.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  572.                                 TAG_DONE);
  573.  
  574.                                 LT_SetAttributes(Handle,GAD_DOWN,
  575.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  576.                                 TAG_DONE);
  577.  
  578.                                 LT_SetAttributes(Handle,GAD_END,
  579.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  580.                                 TAG_DONE);
  581.  
  582.                                 PatternsChanged = TRUE;
  583.  
  584.                                 break;
  585.  
  586.                             case GAD_NEW:
  587.  
  588.                                 if(Node = CreatePatternNode(""))
  589.                                 {
  590.                                     LT_SetAttributes(Handle,GAD_LIST,
  591.                                         GTLV_Labels,    ~0,
  592.                                     TAG_DONE);
  593.  
  594.                                     AddTail((struct List *)PatternList,(struct Node *)Node);
  595.  
  596.                                     LT_SetAttributes(Handle,GAD_LIST,
  597.                                         GTLV_Labels,    PatternList,
  598.                                         GTLV_Selected,    ListCount++,
  599.                                     TAG_DONE);
  600.  
  601.                                     LT_SetAttributes(Handle,GAD_PATTERN,
  602.                                         GTST_String,    "",
  603.                                         GA_Disabled,    FALSE,
  604.                                     TAG_DONE);
  605.  
  606.                                     LT_SetAttributes(Handle,GAD_COMMENT,
  607.                                         GTST_String,    "",
  608.                                         GA_Disabled,    FALSE,
  609.                                     TAG_DONE);
  610.  
  611.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  612.                                         GA_Disabled,    &Selected -> List == ChosenPattern,
  613.                                     TAG_DONE);
  614.  
  615.                                     LT_SetAttributes(Handle,GAD_EDIT,
  616.                                         GA_Disabled,    &Selected -> List == ChosenPattern,
  617.                                     TAG_DONE);
  618.  
  619.                                     LT_SetAttributes(Handle,GAD_SAVE,
  620.                                         GA_Disabled,    FALSE,
  621.                                     TAG_DONE);
  622.  
  623.                                     LT_SetAttributes(Handle,GAD_CLEAR,
  624.                                         GA_Disabled,    FALSE,
  625.                                     TAG_DONE);
  626.  
  627.                                     Selected = Node;
  628.  
  629.                                     Offset = ListCount - 1;
  630.  
  631.                                     LT_SetAttributes(Handle,GAD_TOP,
  632.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  633.                                     TAG_DONE);
  634.  
  635.                                     LT_SetAttributes(Handle,GAD_UP,
  636.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  637.                                     TAG_DONE);
  638.  
  639.                                     LT_SetAttributes(Handle,GAD_DOWN,
  640.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  641.                                     TAG_DONE);
  642.  
  643.                                     LT_SetAttributes(Handle,GAD_END,
  644.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  645.                                     TAG_DONE);
  646.  
  647.                                     LT_Activate(Handle,GAD_COMMENT);
  648.  
  649.                                     PatternsChanged = TRUE;
  650.                                 }
  651.                                 else
  652.                                     DisplayBeep(LocalWindow -> WScreen);
  653.  
  654.                                 break;
  655.  
  656.                             case GAD_CLEAR:
  657.  
  658.                                 LT_SetAttributes(Handle,GAD_LIST,
  659.                                     GTLV_Labels,    ~0,
  660.                                 TAG_DONE);
  661.  
  662.                                 FreeList((struct List *)PatternList);
  663.  
  664.                                 ListCount = 0;
  665.  
  666.                                 LT_SetAttributes(Handle,GAD_LIST,
  667.                                     GTLV_Labels,    PatternList,
  668.                                     GTLV_Selected,    ~0,
  669.                                 TAG_DONE);
  670.  
  671.                                 Selected = NULL;
  672.  
  673.                                 LT_SetAttributes(Handle,GAD_TOP,
  674.                                     GA_Disabled,    TRUE,
  675.                                 TAG_DONE);
  676.  
  677.                                 LT_SetAttributes(Handle,GAD_UP,
  678.                                     GA_Disabled,    TRUE,
  679.                                 TAG_DONE);
  680.  
  681.                                 LT_SetAttributes(Handle,GAD_DOWN,
  682.                                     GA_Disabled,    TRUE,
  683.                                 TAG_DONE);
  684.  
  685.                                 LT_SetAttributes(Handle,GAD_END,
  686.                                     GA_Disabled,    TRUE,
  687.                                 TAG_DONE);
  688.  
  689.                                 LT_SetAttributes(Handle,GAD_REMOVE,
  690.                                     GA_Disabled,    TRUE,
  691.                                 TAG_DONE);
  692.  
  693.                                 LT_SetAttributes(Handle,GAD_EDIT,
  694.                                     GA_Disabled,    TRUE,
  695.                                 TAG_DONE);
  696.  
  697.                                 LT_SetAttributes(Handle,GAD_COMMENT,
  698.                                     GTST_String,    "",
  699.                                     GA_Disabled,    TRUE,
  700.                                 TAG_DONE);
  701.  
  702.                                 LT_SetAttributes(Handle,GAD_PATTERN,
  703.                                     GTST_String,    "",
  704.                                     GA_Disabled,    TRUE,
  705.                                 TAG_DONE);
  706.  
  707.                                 LT_SetAttributes(Handle,GAD_SAVE,
  708.                                     GA_Disabled,    TRUE,
  709.                                 TAG_DONE);
  710.  
  711.                                 LT_SetAttributes(Handle,GAD_CLEAR,
  712.                                     GA_Disabled,    TRUE,
  713.                                 TAG_DONE);
  714.  
  715.                                 PatternsChanged = FALSE;
  716.  
  717.                                 break;
  718.  
  719.                             case GAD_EDIT:
  720.  
  721.                                 if(Selected)
  722.                                 {
  723.                                     LT_LockWindow(LocalWindow);
  724.  
  725.                                     PatternsChanged |= RatePanel(LocalWindow,PhoneList,NULL,&Selected -> List);
  726.  
  727.                                     LT_UnlockWindow(LocalWindow);
  728.                                 }
  729.  
  730.                                 break;
  731.  
  732.                             case GAD_REMOVE:
  733.  
  734.                                 if(Selected)
  735.                                 {
  736.                                     LT_SetAttributes(Handle,GAD_LIST,
  737.                                         GTLV_Labels,    ~0,
  738.                                     TAG_DONE);
  739.  
  740.                                     if(--ListCount)
  741.                                     {
  742.                                         if(Selected -> Node . ln_Succ -> ln_Succ)
  743.                                             Node = (struct PatternNode *)Selected -> Node . ln_Succ;
  744.                                         else
  745.                                         {
  746.                                             Node = (struct PatternNode *)Selected -> Node . ln_Pred;
  747.  
  748.                                             Offset = 0;
  749.                                         }
  750.                                     }
  751.  
  752.                                     Remove((struct Node *)Selected);
  753.  
  754.                                     DeletePatternNode(Selected);
  755.  
  756.                                     LT_SetAttributes(Handle,GAD_LIST,
  757.                                         GTLV_Labels,    PatternList,
  758.                                         GTLV_Selected,    Node -> Node . ln_Succ ? GetNodeOffset((struct Node *)Node,(struct List *)PatternList) : ~0,
  759.                                     TAG_DONE);
  760.  
  761.                                     if(!ListCount)
  762.                                     {
  763.                                         Selected = NULL;
  764.  
  765.                                         LT_SetAttributes(Handle,GAD_TOP,
  766.                                             GA_Disabled,    TRUE,
  767.                                         TAG_DONE);
  768.  
  769.                                         LT_SetAttributes(Handle,GAD_UP,
  770.                                             GA_Disabled,    TRUE,
  771.                                         TAG_DONE);
  772.  
  773.                                         LT_SetAttributes(Handle,GAD_DOWN,
  774.                                             GA_Disabled,    TRUE,
  775.                                         TAG_DONE);
  776.  
  777.                                         LT_SetAttributes(Handle,GAD_END,
  778.                                             GA_Disabled,    TRUE,
  779.                                         TAG_DONE);
  780.  
  781.                                         LT_SetAttributes(Handle,GAD_REMOVE,
  782.                                             GA_Disabled,    TRUE,
  783.                                         TAG_DONE);
  784.  
  785.                                         LT_SetAttributes(Handle,GAD_EDIT,
  786.                                             GA_Disabled,    TRUE,
  787.                                         TAG_DONE);
  788.  
  789.                                         LT_SetAttributes(Handle,GAD_COMMENT,
  790.                                             GTST_String,    "",
  791.                                             GA_Disabled,    TRUE,
  792.                                         TAG_DONE);
  793.  
  794.                                         LT_SetAttributes(Handle,GAD_PATTERN,
  795.                                             GTST_String,    "",
  796.                                             GA_Disabled,    TRUE,
  797.                                         TAG_DONE);
  798.  
  799.                                         LT_SetAttributes(Handle,GAD_SAVE,
  800.                                             GA_Disabled,    TRUE,
  801.                                         TAG_DONE);
  802.  
  803.                                         LT_SetAttributes(Handle,GAD_CLEAR,
  804.                                             GA_Disabled,    TRUE,
  805.                                         TAG_DONE);
  806.                                     }
  807.                                     else
  808.                                     {
  809.                                         Selected = Node;
  810.  
  811.                                         LT_SetAttributes(Handle,GAD_PATTERN,
  812.                                             GTST_String,    Selected -> Pattern,
  813.                                         TAG_DONE);
  814.  
  815.                                         LT_SetAttributes(Handle,GAD_COMMENT,
  816.                                             GTST_String,    Selected -> Comment,
  817.                                         TAG_DONE);
  818.  
  819.                                         LT_SetAttributes(Handle,GAD_TOP,
  820.                                             GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  821.                                         TAG_DONE);
  822.  
  823.                                         LT_SetAttributes(Handle,GAD_UP,
  824.                                             GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  825.                                         TAG_DONE);
  826.  
  827.                                         LT_SetAttributes(Handle,GAD_DOWN,
  828.                                             GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  829.                                         TAG_DONE);
  830.  
  831.                                         LT_SetAttributes(Handle,GAD_END,
  832.                                             GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  833.                                         TAG_DONE);
  834.                                     }
  835.  
  836.                                     PatternsChanged = TRUE;
  837.                                 }
  838.  
  839.                                 break;
  840.  
  841.                             case GAD_LIST:
  842.  
  843.                                 if(Selected = (struct PatternNode *)GetListNode(MsgCode,(struct List *)PatternList))
  844.                                 {
  845.                                     Offset = MsgCode;
  846.  
  847.                                     LT_SetAttributes(Handle,GAD_COMMENT,
  848.                                         GTST_String,    Selected -> Comment,
  849.                                         GA_Disabled,    FALSE,
  850.                                     TAG_DONE);
  851.  
  852.                                     LT_SetAttributes(Handle,GAD_PATTERN,
  853.                                         GTST_String,    Selected -> Pattern,
  854.                                         GA_Disabled,    FALSE,
  855.                                     TAG_DONE);
  856.  
  857.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  858.                                         GA_Disabled,    &Selected -> List == ChosenPattern,
  859.                                     TAG_DONE);
  860.  
  861.                                     LT_SetAttributes(Handle,GAD_EDIT,
  862.                                         GA_Disabled,    &Selected -> List == ChosenPattern,
  863.                                     TAG_DONE);
  864.  
  865.                                     LT_SetAttributes(Handle,GAD_TOP,
  866.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  867.                                     TAG_DONE);
  868.  
  869.                                     LT_SetAttributes(Handle,GAD_UP,
  870.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  871.                                     TAG_DONE);
  872.  
  873.                                     LT_SetAttributes(Handle,GAD_DOWN,
  874.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  875.                                     TAG_DONE);
  876.  
  877.                                     LT_SetAttributes(Handle,GAD_END,
  878.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  879.                                     TAG_DONE);
  880.                                 }
  881.  
  882.                                 break;
  883.  
  884.                             case GAD_COMMENT:
  885.  
  886.                                 if(Selected)
  887.                                 {
  888.                                     LT_SetAttributes(Handle,GAD_LIST,
  889.                                         GTLV_Labels,    ~0,
  890.                                     TAG_DONE);
  891.  
  892.                                     strcpy(Selected -> Comment,LT_GetString(Handle,GAD_COMMENT));
  893.  
  894.                                     LT_SetAttributes(Handle,GAD_LIST,
  895.                                         GTLV_Labels,    PatternList,
  896.                                         GTLV_Selected,    GetNodeOffset((struct Node *)Selected,(struct List *)PatternList),
  897.                                     TAG_DONE);
  898.  
  899.                                     LT_SetAttributes(Handle,GAD_PATTERN,
  900.                                         GTST_String,    Selected -> Pattern,
  901.                                     TAG_DONE);
  902.  
  903.                                     LT_SetAttributes(Handle,GAD_COMMENT,
  904.                                         GTST_String,    Selected -> Comment,
  905.                                     TAG_DONE);
  906.  
  907.                                     PatternsChanged = TRUE;
  908.  
  909.                                     LT_Activate(Handle,GAD_PATTERN);
  910.                                 }
  911.  
  912.                                 break;
  913.  
  914.                             case GAD_PATTERN:
  915.  
  916.                                 if(Selected)
  917.                                 {
  918.                                     strcpy(Selected -> Pattern,LT_GetString(Handle,GAD_PATTERN));
  919.  
  920.                                     PatternsChanged = TRUE;
  921.                                 }
  922.  
  923.                                 break;
  924.  
  925.                             case GAD_LOAD:
  926.  
  927.                                 SplitFileName(LastPattern,&DummyChar,DummyBuffer);
  928.  
  929.                                 LT_LockWindow(LocalWindow);
  930.  
  931.                                 if(FileRequest = GetFile(LocalWindow,LocaleString(MSG_AREACODE_LOAD_GROUP_SETTINGS_TXT),DummyBuffer,FilePart(LastPattern),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  932.                                 {
  933.                                     struct List *SomeList;
  934.  
  935.                                     LT_SetAttributes(Handle,GAD_LIST,
  936.                                         GTLV_Labels,    ~0,
  937.                                     TAG_DONE);
  938.  
  939.                                     Selected = NULL;
  940.  
  941.                                     if(!(SomeList = LoadTimeDateList(DummyBuffer,&Error)))
  942.                                         ShowError(LocalWindow,ERR_LOAD_ERROR,Error,DummyBuffer);
  943.                                     else
  944.                                     {
  945.                                         DeletePatternList(PatternList);
  946.  
  947.                                         PatternList = SomeList;
  948.  
  949.                                         strcpy(LastPattern,DummyBuffer);
  950.  
  951.                                         PatternsChanged = FALSE;
  952.                                     }
  953.  
  954.                                     LT_SetAttributes(Handle,GAD_LIST,
  955.                                         GTLV_Labels,    PatternList,
  956.                                     TAG_DONE);
  957.  
  958.                                     LT_SetAttributes(Handle,GAD_PATTERN,
  959.                                         GTST_String,    "",
  960.                                         GA_Disabled,    TRUE,
  961.                                     TAG_DONE);
  962.  
  963.                                     LT_SetAttributes(Handle,GAD_COMMENT,
  964.                                         GTST_String,    "",
  965.                                         GA_Disabled,    TRUE,
  966.                                     TAG_DONE);
  967.  
  968.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  969.                                         GA_Disabled,    TRUE,
  970.                                     TAG_DONE);
  971.  
  972.                                     LT_SetAttributes(Handle,GAD_EDIT,
  973.                                         GA_Disabled,    TRUE,
  974.                                     TAG_DONE);
  975.  
  976.                                     LT_SetAttributes(Handle,GAD_TOP,
  977.                                         GA_Disabled,    TRUE,
  978.                                     TAG_DONE);
  979.  
  980.                                     LT_SetAttributes(Handle,GAD_UP,
  981.                                         GA_Disabled,    TRUE,
  982.                                     TAG_DONE);
  983.  
  984.                                     LT_SetAttributes(Handle,GAD_DOWN,
  985.                                         GA_Disabled,    TRUE,
  986.                                     TAG_DONE);
  987.  
  988.                                     LT_SetAttributes(Handle,GAD_END,
  989.                                         GA_Disabled,    TRUE,
  990.                                     TAG_DONE);
  991.  
  992.                                     LT_SetAttributes(Handle,GAD_SAVE,
  993.                                         GA_Disabled,    !ListCount,
  994.                                     TAG_DONE);
  995.  
  996.                                     LT_SetAttributes(Handle,GAD_CLEAR,
  997.                                         GA_Disabled,    !ListCount,
  998.                                     TAG_DONE);
  999.  
  1000.                                     FreeAslRequest(FileRequest);
  1001.                                 }
  1002.  
  1003.                                 LT_UnlockWindow(LocalWindow);
  1004.  
  1005.                                 break;
  1006.  
  1007.                             case GAD_SAVE:
  1008.  
  1009.                                 SplitFileName(LastPattern,&DummyChar,DummyBuffer);
  1010.  
  1011.                                 LT_LockWindow(LocalWindow);
  1012.  
  1013.                                 if(FileRequest = GetFile(LocalWindow,LocaleString(MSG_AREACODE_SAVE_GROUP_SETTINGS_TXT),DummyBuffer,FilePart(LastPattern),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  1014.                                 {
  1015.                                     if(!SaveTimeDateList(DummyBuffer,PatternList,&Error))
  1016.                                         ShowError(LocalWindow,ERR_SAVE_ERROR,Error,DummyBuffer);
  1017.                                     else
  1018.                                     {
  1019.                                         strcpy(LastPattern,DummyBuffer);
  1020.  
  1021.                                         PatternsChanged = FALSE;
  1022.                                     }
  1023.  
  1024.                                     FreeAslRequest(FileRequest);
  1025.                                 }
  1026.  
  1027.                                 LT_UnlockWindow(LocalWindow);
  1028.  
  1029.                                 break;
  1030.                         }
  1031.                     }
  1032.                 }
  1033.             }
  1034.             while(!Done);
  1035.  
  1036.             PopWindow();
  1037.         }
  1038.  
  1039.         LT_DeleteHandle(Handle);
  1040.     }
  1041.  
  1042.     if(PhoneList)
  1043.         DeletePhoneList(PhoneList);
  1044. }
  1045.